home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / sys / RCS / sem.h,v < prev    next >
Text File  |  1991-09-10  |  5KB  |  224 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.2.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.2
  10. date     91.09.09.22.13.33;  author kupfer;  state Exp;
  11. branches 1.2.1.1;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     91.09.09.22.13.07;  author kupfer;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19. 1.2.1.1
  20. date     91.09.09.22.13.56;  author kupfer;  state Exp;
  21. branches ;
  22. next     ;
  23.  
  24.  
  25. desc
  26. @Definitions for System V semaphores.
  27. @
  28.  
  29.  
  30. 1.2
  31. log
  32. @Add RCS Header line.
  33. @
  34. text
  35. @/*    @@(#)sem.h 1.9 88/02/08 SMI; from S5R2 6.1 */
  36. /* $Header$ */
  37.  
  38. /*
  39.  *    IPC Semaphore Facility.
  40.  */
  41.  
  42. /*
  43.  *    Semaphore Operation Flags.
  44.  */
  45.  
  46. #define    SEM_UNDO    010000    /* set up adjust on exit entry */
  47.  
  48. /*
  49.  *    Semctl Command Definitions.
  50.  */
  51.  
  52. #define    GETNCNT    3    /* get semncnt */
  53. #define    GETPID    4    /* get sempid */
  54. #define    GETVAL    5    /* get semval */
  55. #define    GETALL    6    /* get all semval's */
  56. #define    GETZCNT    7    /* get semzcnt */
  57. #define    SETVAL    8    /* set semval */
  58. #define    SETALL    9    /* set all semval's */
  59. #define    GETKEYS    10    /* get all keys */
  60.  
  61. /*
  62.  *    Structure Definitions.
  63.  */
  64.  
  65. /*
  66.  *    There is one semaphore id data structure for each set of semaphores
  67.  *        in the system.
  68.  */
  69.  
  70. struct semid_ds {
  71.     struct ipc_perm    sem_perm;    /* operation permission struct */
  72.     struct sem    *sem_base;    /* ptr to first semaphore in set */
  73.     ushort        sem_nsems;    /* # of semaphores in set */
  74.     time_t        sem_otime;    /* last semop time */
  75.     time_t        sem_ctime;    /* last change time */
  76. };
  77.  
  78. /*
  79.  *    There is one semaphore structure for each semaphore in the system.
  80.  */
  81.  
  82. struct sem {
  83.     ushort    semval;        /* semaphore text map address */
  84.     int    sempid;        /* pid of last operation */
  85.     ushort    semncnt;    /* # awaiting semval > cval */
  86.     ushort    semzcnt;    /* # awaiting semval = 0 */
  87. #ifdef KERNEL
  88.     Sync_Condition semLock;    /* Lock for the semaphore. */
  89. #endif
  90. };
  91.  
  92. /*
  93.  *    User semaphore template for semop system calls.
  94.  */
  95.  
  96. struct sembuf {
  97.     short    sem_num;    /* semaphore # */
  98.     short    sem_op;        /* semaphore operation */
  99.     short    sem_flg;    /* operation flags */
  100. };
  101.  
  102. /*
  103.  *    'arg' argument template for semctl system calls.
  104.  */
  105. union semun {
  106.     int        val;    /* value for SETVAL */
  107.     struct semid_ds    *buf;    /* buffer for IPC_STAT & IPC_SET */
  108.     unsigned short        *array;    /* array for GETALL & SETALL */
  109. };
  110.  
  111.  
  112. /*
  113.  *    Implementation Constants.
  114.  */
  115.  
  116. #define    PSEMN    (PZERO + 3)    /* sleep priority waiting for greater value */
  117. #define    PSEMZ    (PZERO + 2)    /* sleep priority waiting for zero */
  118.  
  119. #define    SEMVMX    32767        /* semaphore maximum value */
  120. #define    SEMAEM    16384        /* adjust on exit max value */
  121.  
  122.  
  123. /*
  124.  *    Permission Definitions.
  125.  */
  126.  
  127. #define    SEM_A    0200    /* alter permission */
  128. #define    SEM_R    0400    /* read permission */
  129.  
  130. /*
  131.  *    There is one undo structure per process in the system.
  132.  */
  133.  
  134. struct sem_undo {
  135.     struct sem_undo    *un_np;    /* ptr to next active undo structure */
  136.     short        un_cnt;    /* # of active entries */
  137.     struct undo {
  138.         short    un_aoe;    /* adjust on exit values */
  139.         short    un_num;    /* semaphore # */
  140.         int    un_id;    /* semid */
  141.     }    un_ent[1];    /* (semume) undo entries (one minimum) */
  142. };
  143.  
  144. /*
  145.  * semaphore information structure
  146.  */
  147. struct    seminfo    {
  148.     int    semmap,        /* # of entries in semaphore map */
  149.         semmni,        /* # of semaphore identifiers */
  150.         semmns,        /* # of semaphores in system */
  151.         semmnu,        /* # of undo structures in system */
  152.         semmsl,        /* max # of semaphores per id */
  153.         semopm,        /* max # of operations per semop call */
  154.         semume,        /* max # of undo entries per process */
  155.         semusz,        /* size in bytes of undo structure */
  156.         semvmx,        /* semaphore maximum value */
  157.         semaem;        /* adjust on exit max value */
  158. };
  159. struct seminfo    seminfo;    /* configuration parameters */
  160.  
  161.  
  162. /*
  163.  *    Configuration Parameters
  164.  * These parameters are tuned by editing the system configuration file.
  165.  * The following lines establish the default values.
  166.  */
  167. #ifndef    SEMMNI
  168. #define    SEMMNI    10        /* # of semaphore identifiers */
  169. #endif
  170. #ifndef    SEMMNS
  171. #define    SEMMNS    60        /* # of semaphores in system */
  172. #endif
  173. #ifndef    SEMUME
  174. #define    SEMUME    10        /* max # of undo entries per process */
  175. #endif
  176. #ifndef    SEMMNU
  177. #define    SEMMNU    30        /* # of undo structures in system */
  178. #endif
  179.  
  180. /* The following parameters are assumed not to require tuning */
  181. #ifndef    SEMMAP
  182. #define    SEMMAP    30        /* # of entries in semaphore map */
  183. #endif
  184. #ifndef    SEMMSL
  185. #define    SEMMSL    SEMMNS        /* max # of semaphores per id */
  186. #endif
  187. #ifndef    SEMOPM
  188. #define    SEMOPM    100        /* max # of operations per semop call */
  189. #endif
  190.  
  191.         /* size in bytes of undo structure */
  192. #define    SEMUSZ    (sizeof(struct sem_undo)+sizeof(struct undo)*SEMUME)
  193.  
  194.  
  195. /*
  196.  * Structures allocated in machdep.c
  197.  */
  198. struct semid_ds *sema;        /* semaphore id pool */
  199. struct sem    *sem;        /* semaphore pool */
  200. struct map    *semmap;    /* semaphore allocation map */
  201. struct sem_undo    **sem_undo;    /* per process undo table */
  202. int        *semu;        /* undo structure pool */
  203. @
  204.  
  205.  
  206. 1.2.1.1
  207. log
  208. @Initial branch for Sprite server.
  209. @
  210. text
  211. @d2 1
  212. a2 1
  213. /* $Header: /sprite/src/lib/include/sys/RCS/sem.h,v 1.2 91/09/09 22:13:33 kupfer Exp $ */
  214. @
  215.  
  216.  
  217. 1.1
  218. log
  219. @Initial revision
  220. @
  221. text
  222. @d2 1
  223. @
  224.